package com.java8_training;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import com.javase.entity.User;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;

/**
 * @author taoshen
 * @create 2021/9/23
 */
public class TimuJava8 {
    @Test
    public void test1() {
       List<User> userList = CollUtil.newArrayList();

       IntStream.rangeClosed(1, 10).forEach(i -> {
           User user = new User();
           user.setName(IdUtil.simpleUUID().substring(0, 5));
           user.setId(i);
           user.setGender(i % 2 == 0 ? 1 : 2);
           userList.add(user);
       });

        /**
         * 将集合分为两个集合：男一个集合  女一个集合
         */
        // TODO


        /**
         * 将集合收集成一个Map  键为字符串 男或者女  值为对应的所有id的 使用逗号拼接的字符串
         * ["男", "1, 3, 5"]
         * ["女", "2, 4, 6"]
         */
        // TODO
    }

    @Test
    public void test2() {
        List<User> userList = CollUtil.newArrayList();
        User user1 = new User();
        user1.setId(1).setName("张翠山").setPhone("13333333333");
        userList.add(user1);

        User user2 = new User();
        user2.setId(2).setName("张无忌").setPhone("13333333333");
        userList.add(user2);

        User user3 = new User();
        user3.setId(3).setName("东方不败").setPhone("1333333");
        userList.add(user3);

        User user4 = new User();
        user4.setId(4).setName("张角").setPhone("33333333333");
        userList.add(user4);

        /**
         * 分别筛选出：
         * 1.姓张的
         * 2.名字三个字的
         * 3.手机号号码合法的  号码由1开头  并且全是11位数字 则判定合法 尽量使用正则去regex
         */
        // TODO

        /**
         * 去除手机号不合法的用法  剩下的用户姓名以及手机号加密
         * 加密规则：
         * 13333333333 =》 133****3333
         * 张翠山 =》 张**
         * 张角 =》 张**
         * 东方不败 =》 东**
         */
        // TODO
    }

    @Test
    public void test3(){
        List<User> list = new ArrayList<>();

        User user1 = new User();
        user1.setName("张三").setAddress("合肥");
        list.add(user1);

        User user2 = new User();
        user2.setName("王五").setAddress("延边");
        list.add(user2);

        User user3 = new User();
        user3.setName("赵六").setAddress("齐齐哈尔");
        list.add(user3);

        User user4 = new User();
        user4.setName("李四").setAddress("合肥");
        list.add(user4);

        /**
         * 统计地址为"合肥"的人数
         */


    }

    @Test
    public void test4() {
        List<User> list = CollUtil.newArrayList();

        IntStream.rangeClosed(1, RandomUtil.randomInt(4, 20)).forEach(i -> {
            User user = new User();
            user.setId(i);
            user.setName(RandomUtil.randomString(4));
            list.add(user);
        });

        // TODO
        /**
         * 通过用户的name按照ASCII码表进行排序 再统计出top10
         * 如果集合中有 >= 10个用户 则取出前10个
         * 如果集合中 没有10个用户 则有多少 取出多少
         */
    }

    @Test
    public void test5() {
        List<User> list = CollUtil.newArrayList();
        // 因为User实体类有lombok的@Accessors(chain = true) 每次都会return this 所以可以如此写法
        list.add(new User().setId(1).setHobbies("足球,篮球,网球,台球"));
        list.add(new User().setId(2).setHobbies("足球,篮球,网球"));
        list.add(new User().setId(3).setHobbies("篮球,网球,台球"));
        list.add(new User().setId(4).setHobbies("网球,台球"));
        list.add(new User().setId(5).setHobbies("足球,篮球,台球"));

        // TODO
        /**
         * 四种球类：足球,篮球,网球,台球
         *
         * 统计出喜欢各种球类的分别有多少人 搞成一个Map<String, Integer>
         * ["足球":3]
         * ["篮球":4]
         */

        // TODO
        /**
         * 进阶：
         * 如果不知道 到底有多少种球类呢 有什么就分析什么  怎么实现
         */
    }

    @Test
    public void test6() {
        List<User> list = CollUtil.newArrayList();

        IntStream.rangeClosed(1, 100).forEach(i -> {
           list.add(new User().setId(i).setHobbies(RandomUtil.randomEle(Arrays.asList("足球", "篮球", "网球", "台球"))));
        });

        // TODO
        /**
         * 分析出喜欢各种球类 各有多少人 收集成Map<String, Integer>
         * 再根据人数 进行rank排行  最终返回top3的Map<String, Integer>
         */
    }

    @Test
    public void test7() {
        List<User> list = CollUtil.newArrayList();
        list.add(new User().setId(1).setHobbies("足球,篮球,网球"));
        list.add(new User().setId(2).setHobbies("台球,篮球,网球"));
        list.add(new User().setId(3).setHobbies("足球,篮球"));
        list.add(new User().setId(4).setHobbies("足球"));
        // 随机两个球类
        String randomHobbies = RandomUtil.randomEle(Arrays.asList("足球", "篮球", "网球", "台球")) + ","
                + RandomUtil.randomEle(Arrays.asList("足球", "篮球", "网球", "台球"));
        // TODO
        /**
         * 这些同学  最近又都一起参加了随机两种球类（足球,篮球,网球,羽毛球的其中任意两种）
         * 对这些同学的hobbies字段进行更新
         *
         * 例如：随机到 足球和网球
         * 则 1同学 还是 足球,篮球,网球
         * 则 2同学 是 台球,篮球,网球,足球
         *    。。
         *    。。
         */
    }

    @Test
    public void test8 () {
        List<User> list = CollUtil.newArrayList();
        list.add(new User().setId(1).setGender(1).setHobbies("足球,篮球,网球"));
        list.add(new User().setId(2).setGender(2).setHobbies("足球,篮球,网球"));
        list.add(new User().setId(3).setGender(1).setHobbies("足球,台球,网球"));
        list.add(new User().setId(4).setGender(2).setHobbies("足球,篮球,网球,羽毛球"));
        list.add(new User().setId(5).setGender(1).setHobbies("足球,网球"));
        list.add(new User().setId(6).setGender(2).setHobbies("铅球"));


        // TODO
        /**
         * 统计出一个Map<String, String> 键为：男或者女 值为：喜欢各个球类背后有哪些人 把id体现出来
         * 例如：
         * ["男" : "足球:1,2,3&&篮球:1,3"]
         * ["女" : "足球:1,2,3&&网球:1,3"&&铅球:1]
         */

        // TODO
        /**
         * 统计出Map<String, String> 键为：各种出现的球类 值为：该球类下 男有哪些人 女有哪些人 把id体现出来
         * 如果 某球类下 某个性别没有人 则表示为-1代表没有
         * 例如：
         * ["足球" : "男:1,2,3&&女:1,3"]
         * ["铅球" : "男:-1&&女:6"]
         */
    }



}
